package com.zmn.plat.services.interfaces.channel;

import com.zmn.plat.model.entity.channel.ChannelServProduct;
import com.zmn.plat.model.vo.channel.ChannelServProductVO;
import com.zmn.plat.model.vo.product.tariff.item.price.ProductServiceItemExcutePriceQueryVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 描述: 渠道服务产品表接口类
 *
 * @author linfeng
 * @since 2019/11/12
 **/
public interface ChannelServProductService {

    /**
     * 描述: 根据id查询渠道服务产品表数据
     *
     * @param id
     *            渠道服务产品表id
     * @return com.zmn.plat.model.entity.channel.ChannelServProduct
     * @author linfeng
     * @since 2019/11/12
     **/
    ChannelServProduct findById(Integer id);

    /**
     * 描述: 根据产品id 查询数据 * * @param productId 产品id
     *
     * @return com.zmn.plat.model.entity.channel.ChannelServProduct
     * @author linfeng
     * @since 2019/11/12
     **/
    ChannelServProduct findByProductId(Integer productId, Integer channelId);

    /**
     * 描述: 根据渠道ID和产品id集合 查询数据
     *
     * @param productIdList
     *            产品ID集合
     * @param channelId
     *            渠道ID
     * @return
     * @auther linfeng
     * @since 2019/11/12
     */
    List<ChannelServProduct> listByProductIdListAndChannelId(List<Integer> productIdList, Integer channelId);

    /**
     * 描述: 根据渠道服务产品表id集合查询渠道服务产品表数据 如ids为null则返回 new ArrayList();
     *
     * @param ids
     *            渠道服务产品表id集合
     * @return java.util.List<com.zmn.plat.model.entity.channel.ChannelServProduct>
     * @author linfeng
     * @since 2019/11/12
     **/
    List<ChannelServProduct> listByIds(List<Integer> ids);

    /**
     * 描述: 查询渠道开通的产品
     *
     * @param channelId channelId
     * @return java.util.List<Integer>
     * @author jiafei
     * @since 2021/6/28 19:08
     */
    List<ChannelServProduct> listProductIdByChannelId(@Param("channelId") Integer channelId);

    /**
     * 描述: 查询渠道下指定服务分类产品一二级分类下的产品
     *
     * @param vo
     * @return java.util.List<com.zmn.plat.model.vo.channel.ChannelServProductVO>
     * @author linfeng
     * @since 2019/11/12
     **/
    List<ChannelServProductVO> listProductByPriceQuery(ProductServiceItemExcutePriceQueryVo vo);

    /**
     * 描述: 根据产品ID集合和渠道ID修改渠道服务产品表状态
     *
     * @param
     * @return
     * @auther linfeng
     * @since 2019/11/12 19:22
     */
    void updateStatus(String ids, int status, int channelId, String realName);

    /**
     * 描述: 新增渠道服务产品数据 注意channelServProductId为必传，否则抛出 NullPointerException();
     *
     * @param channelServProduct
     *            渠道服务产品数据
     * @author linfeng
     * @since 2019/11/12
     **/
    void updateChannelServProduct(ChannelServProduct channelServProduct);

    /**
     * 描述: 修改渠道服务产品数据
     *
     * @param channelServProduct
     *            渠道服务产品数据
     * @author linfeng
     * @since 2019/11/12
     **/
    void updateChannelServProductByProductId(ChannelServProduct channelServProduct);

    /**
     * 描述: 新增渠道服务产品数据
     *
     * @param channelServProduct
     *            渠道服务产品数据
     * @author linfeng
     * @since 2019/11/12
     **/
    void insertChannelServProduct(ChannelServProduct channelServProduct);

    /**
     * 描述: 根据渠道id删除
     *
     * @param channelId 渠道id
     * @return java.lang.Integer
     * @author guoqiao
     * @since 2021/6/9 14:27
     */
    Integer deleteByChannelId(Integer channelId);

    /**
     * 描述: 从旧渠道复制到新渠道
     *
     * @param originalChannelId 原渠道ID
     * @param targetChannelId 新渠道ID
     * @param operator 操作者
     * @return java.lang.Boolean
     * @author guoqiao
     * @since 2021/6/8 13:49
     */
    void copy(Integer originalChannelId, int targetChannelId, String operator);
}